package com.tao.innerclass;

public class MemberInnerClass01 {
    public static void main(String[] args) {

        //外部其他类访问成员内部类的方法有两个
        //第一个
        Outer04 outer04 = new Outer04();
        outer04.m1();//先外部类对象实例

        // outer08.new Inner08(); 相当于把 new Inner08()当做是 outer08 成员
        Outer04.Inner01 inner01 = outer04.new Inner01();
        inner01.test();

        //第二种方法
        //在外部类中，编写一个方法，可以返回 Inner01 对象
        Outer04.Inner01 inner011 = outer04.getInner01();
        inner011.test();

    }
}
class Outer04{
    private int n1 = 10;
    public void t1(){
        System.out.println("Outer04 t1()");
    }
    public class Inner01{
        public void test(){//可以添加任意访问修饰符(public、protected 、默认、private),因为它的地位就是一个成员
            System.out.println(n1);//可以直接访问外部类的所有成员，包含私有的
            //如果内部类和外部类成员重名，默认遵循就近原则，和前两种内部类规则一样
        }
    }

    //成员内部类的作用域和外部类的其他成员一样，如下，在外部类的成员方法中创建内部类对象实例在调用
    public void m1(){
        Inner01 inner01 = new Inner01();
        inner01.test();
    }

    public Inner01 getInner01(){
        return new Inner01();
    }

}
